<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;padding: 0;list-style: none;box-sizing: border-box;
        }
        .box{
            width: 300px;height: 300px;margin: 50px auto;
        }.box-ul{
            width: 100%;height: 100%;display: flex;justify-content: center;align-content: center;flex-wrap: wrap;
        }.box-li{
            width: 100px;height: 100px;border: 1px solid black;display: inline-block;cursor: pointer;
        }.box-span{width: 80%;height: 80%;display: block;margin: 10px auto;text-align: center;line-height: 70px;font-size: 20px;}
    </style>
</head>
<body>
    <div class="box">
        <ul class="box-ul"></ul>
    </div>
</body>
</html>
<script>
    var colorList = ['blue','red','yellow','pink','magenta','green']
    var box_ul = document.querySelector('.box-ul');


    var box_liList = []//所有的li标签


    for(let i =0;i<9;i++){
        var box_li = document.createElement('li');

        box_li.dataset.index = i

        box_li.className = 'box-li';
        box_liList.push(box_li)
        box_ul.append(box_li)
    }


  var box_soanList = []//所有的span标签


    for(let i=0;i<9;i++){
        var boxLi_span = document.createElement('span');
        boxLi_span.draggable="true"
        //ondragover事件在拖动元素在目标元素上方时触发，通常用于防止默认的拖放行为。
        //可以通过event.preventDefault()方法阻止默认行为。
        boxLi_span.ondragover = dragOverFun;

        //ondragstart事件在拖动元素时触发，通常用于设置拖动时的数据类型和数据。
        //可以通过event.dataTransfer.setData()方法设置数据类型和数据。
        boxLi_span.ondragstart = dragStartFun;

        //ondrop事件在拖动元素放置在目标元素上时触发，通常用于获取拖动时设置的数据。
        boxLi_span.ondrop = ondRopFun;

        boxLi_span.dataset.index = i

        boxLi_span.className = 'box-span';
        boxLi_span.style.backgroundColor = colorList[i];
        if(i<6){
            boxLi_span.innerText = `选项${i}`
        }
        box_soanList.push(boxLi_span)
        box_liList[i].append(boxLi_span)
    }
    var this_elment;//拖动的元素index

    var that_elment;//拖动到的元素index

    var thit_elment;//拖动到指定位置的子元素

    var thes_elment;//准备拖动的li元素
    function dragStartFun(e){

        this_elment = e.target;
        thes_elment = e.target.parentElement
    }

    function dragOverFun(e){
        e.preventDefault()

        that_elment = e.target.parentElement;
        thit_elment = e.target
       
    }

    function ondRopFun(e){
        
    var num = Math.abs(this_elment.dataset.index - that_elment.dataset.index)
       if(num == 1 || num == 3 || num == 0){
        let open = thit_elment;//将拖动的元素暂存起来
        let numIndex = thit_elment.dataset.index//将index先暂存起来

        that_elment.innerHTML = '';//将拖到指定位置的元素清空
        this_elment.dataset.index = that_elment.dataset.index;
        thit_elment.dataset.index = thes_elment.dataset.index
        that_elment.append(this_elment);
        thes_elment.append(open);

        console.log('鼠标拖到的li元素',that_elment);//鼠标拖到的li元素
         console.log('鼠标拖到的span元素',thit_elment);//鼠标拖到的span元素
         console.log('鼠标拖动的span元素',this_elment);//鼠标拖动的span元素
         console.log('鼠标拖动的span元素',thes_elment);//鼠标准备拖动的li元素
       }
      
    }


    //文字禁止选中
// var element = document.documentElement
//     if (typeof(element.onselectstart) != "undefined") {        
//     // IE下禁止元素被选取        
//     element.onselectstart = new Function("return false");        
// } else {
//     // firefox下禁止元素被选取的变通办法        
//     element.onmousedown = new Function("return false");        
//     element.onmouseup = new Function("return true");        
// } 


    // for(let i=0;i<imgs.length;i++){
    //     //将循环序号赋值到索引
    //     imgs[i].i=i;
    //     // console.log(imgs);
    //     div[i].i=i;
    //     //给每个div写入拖拽事件
    //     div[i].ondragover=function(e){
    //     console.log(o1.i);
    //     console.log(e.target.i);
    //     //判断图片索引值与div索引
    //     if(o1.i!==undefined&&o1.i===e.target.i){
    //         //阻止默认事件
    //         e.preventDefault()
    //         div[i].ondrop=function(){
    //     this.append(o1);
    // } 
    //     }
    // }
    
    //     }
</script>